<?php

/**
 * 旋转图像
 * Class Solution
 */
class Solution {

    /**
     * @param Integer[][] $matrix
     * @return NULL
     */
    function rotate(&$matrix) {

        $n=sizeof($matrix);

        for($i=1;$i<=$n/2;$i++){
            //每一圈
            $len=($n-2*($i-1));//每一圈的边长度
            $start=$i-1;//每一圈的起点,($start,$start)
            $end=$start+$len-1;//每一圈的终点
            for($j=$start;$j<$start+$len-1;$j++){
                //每一圈的边上的点
                //第一个点
                $point1=[$start,$j];//如第一圈第一个点：(0,0)
                $arr=$this->goStep($point1,$start,$end);
                //替换
                $value=$matrix[$arr[3][0]][$arr[3][1]];//取最后一个数字
                foreach($arr as $point){
                    $value_tmp=$matrix[$point[0]][$point[1]];
                    $matrix[$point[0]][$point[1]]=$value;
                    $value=$value_tmp;
                }
            }
        }
        return $matrix;
    }

    /**
     * 顺时针走
     * @param     $point
     * @param     $start
     * @param     $end
     * @param int $step,步数，默认1步
     */
    function goStep($point,$start,$end){
        $x1=$point[0];
        $y1=$point[1];

        //第二个点位置
        $x2=$y1;
        $y2=$end;
        //第三个点位置
        $x3=$end;
        $y3=$end-($y1-$start);
        //第四个点
        $x4=$y3;
        $y4=$start;

        return [
            [$x1,$y1],
            [$x2,$y2],
            [$x3,$y3],
            [$x4,$y4],
        ];
    }
}